<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8"/>
<title>C++位运算 - 至尊王者 - 博客园</title>
<link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=d_Et_wtKX7bJcow-mLRlKv4wqGQ2rjNrWTPvZmUqF8Y1"/>
<link id="MainCss" type="text/css" rel="stylesheet" href="/skins/BlackLowKey/bundle-BlackLowKey.css?v=oFaMt7Dmn7ut5_qEiCmHFkW7VlBCKrvSTMa4kvoaFcs1"/>
<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/flying_bat/rss"/>
<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/flying_bat/rsd.xml"/>
<link type="application/wlwmanifest+xml" rel="wlwmanifest" href="http://www.cnblogs.com/flying_bat/wlwmanifest.xml"/>
<script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"></script>  
<script type="text/javascript">var currentBlogApp = 'flying_bat', cb_enable_mathjax=false;</script>
<script src="/bundles/blog-common.js?v=dVqr0ue7y29mRAG2afMkFcSk38ChENfNlXrmAf_YHQE1" type="text/javascript"></script>
</head>
<body>
<a name="top"></a>
<!--PageBeginHtml Block Begin-->




<!--标题党-->
<!--

-->
<!--PageBeginHtml Block End-->

<!--done-->
<div id="home">
<div id="header">
	<div id="blogTitle">
	<a id="lnkBlogLogo" href="http://www.cnblogs.com/flying_bat/"><img id="blogLogo" src="/Skins/custom/images/logo.gif" alt="返回主页" /></a>			
		
<!--done-->
<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/flying_bat/">飞扬天下</a></h1>
<h2></h2>



		
	</div><!--end: blogTitle 博客的标题和副标题 -->
	<div id="navigator">
		
<ul id="navList">
<li><a id="MyLinks1_HomeLink" class="menu" href="http://www.cnblogs.com/">博客园</a></li>
<li><a id="MyLinks1_MyHomeLink" class="menu" href="http://www.cnblogs.com/flying_bat/">首页</a></li>
<li><a id="MyLinks1_NewPostLink" class="menu" rel="nofollow" href="http://i.cnblogs.com/EditPosts.aspx?opt=1">新随笔</a></li>
<li><a id="MyLinks1_ContactLink" class="menu" rel="nofollow" href="http://space.cnblogs.com/msg/send/%e8%87%b3%e5%b0%8a%e7%8e%8b%e8%80%85">联系</a></li>
<li><a id="MyLinks1_Syndication" class="menu" href="http://www.cnblogs.com/flying_bat/rss">订阅</a>
<!--<a id="MyLinks1_XMLLink" class="aHeaderXML" href="http://www.cnblogs.com/flying_bat/rss"><img src="http://www.cnblogs.com/images/xml.gif" alt="订阅" /></a>--></li>
<li><a id="MyLinks1_Admin" class="menu" rel="nofollow" href="http://i.cnblogs.com/">管理</a></li>
</ul>
		<div class="blogStats">
			
			
<!--done-->
随笔- 589&nbsp;
文章- 1&nbsp;
评论- 337&nbsp;

			
		</div><!--end: blogStats -->
	</div><!--end: navigator 博客导航栏 -->
</div><!--end: header 头部 -->

<div id="main">
	<div id="mainContent">
	<div class="forFlow">
		

<!--done-->
<div id="topics">
	<div class = "post">
		<h1 class = "postTitle">
			<a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/flying_bat/archive/2008/06/17/1224178.html">C++位运算</a>
		</h1>
		<div class="clear"></div>
		<div class="postBody">
			<div id="cnblogs_post_body"><font face="Verdana">前言&nbsp;&nbsp; <br />
&nbsp; 看到有些人对位运算还存在问题，于是决定写这篇文章作个简要说明。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 什么是位(bit)？&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;很简单，位(bit)就是单个的0或1，位是我们在计算机上所作一切的基础。计算机上的所有数据都是用位来存储的。一个字节(BYTE)由八个位组成，一个字(WORD)是二个字节或十六位，一个双字(DWORD)是二个字(WORDS)或三十二位。如下所示：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 1&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 0&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 0&nbsp;&nbsp; 1&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 1&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; <br />
&nbsp; |&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |&nbsp;&nbsp; <br />
&nbsp; |&nbsp;&nbsp; +-&nbsp;&nbsp; bit&nbsp;&nbsp; 31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bit&nbsp;&nbsp; 0&nbsp;&nbsp; -+&nbsp;&nbsp; |&nbsp;&nbsp; <br />
&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; <br />
&nbsp; +--&nbsp;&nbsp; BYTE&nbsp;&nbsp; 3&nbsp;&nbsp; ----&nbsp;&nbsp; -+----&nbsp;&nbsp; BYTE&nbsp;&nbsp; 2&nbsp;&nbsp; ---+----&nbsp;&nbsp; BYTE&nbsp;&nbsp; 1&nbsp;&nbsp; ---+---&nbsp;&nbsp; BYTE&nbsp;&nbsp; 0&nbsp;&nbsp; -----+&nbsp;&nbsp; <br />
&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; <br />
&nbsp; +------------&nbsp;&nbsp; WORD&nbsp;&nbsp; 1&nbsp;&nbsp; ------------+-----------&nbsp;&nbsp; WORD&nbsp;&nbsp; 0&nbsp;&nbsp; -------------+&nbsp;&nbsp; <br />
&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; <br />
&nbsp; +-----------------------------&nbsp;&nbsp; DWORD&nbsp;&nbsp; -----------------------------+&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;使用位运算的好处是可以将BYTE,&nbsp;&nbsp; WORD&nbsp;&nbsp; 或&nbsp;&nbsp; DWORD&nbsp;&nbsp; 作为小数组或结构使用。通过位运算可以检查位的值或赋值，也可以对整组的位进行运算。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 16进制数及其与位的关系&nbsp;&nbsp; <br />
&nbsp; 用0或1表示的数值就是二进制数，很难理解。因此用到16进制数。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 16进制数用4个位表示0&nbsp;&nbsp; -&nbsp;&nbsp; 15的值，4个位组成一个16进制数。也把4位成为半字节(nibble)。一个BYTE有二个nibble，因此可以用二个16进制数表示一个BYTE。如下所示：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; NIBBLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HEX&nbsp;&nbsp; VALUE&nbsp;&nbsp; <br />
&nbsp; ======&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =========&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 0001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 0010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 0011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 0100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 0101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 0110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 0111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 1111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 如果用一个字节存放字母"r"(ASCII码114)，结果是：&nbsp;&nbsp; <br />
&nbsp; 0111&nbsp;&nbsp; 0010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二进制&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16进制&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 可以表达为：'0x72'&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 有6种位运算：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 与运算&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或运算&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 异或运算&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非运算(求补)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 右移运算&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 左移运算&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 与运算(&amp;)&nbsp;&nbsp; <br />
&nbsp; 双目运算。二个位都置位(等于1)时，结果等于1，其它的结果都等于0。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 与运算的一个用途是检查指定位是否置位(等于1)。例如一个BYTE里有标识位，要检查第4位是否置位，代码如下：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; b&nbsp;&nbsp; =&nbsp;&nbsp; 50;&nbsp;&nbsp; <br />
&nbsp; if&nbsp;&nbsp; (&nbsp;&nbsp; b&nbsp;&nbsp; &amp;&nbsp;&nbsp; 0x10&nbsp;&nbsp; )&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "Bit&nbsp;&nbsp; four&nbsp;&nbsp; is&nbsp;&nbsp; set"&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp; else&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "Bit&nbsp;&nbsp; four&nbsp;&nbsp; is&nbsp;&nbsp; clear"&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 上述代码可表示为：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00110010&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; b&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&nbsp;&nbsp; 00010000&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; &amp;&nbsp;&nbsp; 0x10&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; ----------------------------&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00010000&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; result&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 可以看到第4位是置位了。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 或运算(&nbsp;&nbsp; |&nbsp;&nbsp; )&nbsp;&nbsp; <br />
&nbsp; 双目运算。二个位只要有一个位置位，结果就等于1。二个位都为0时，结果为0。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 与运算也可以用来检查置位。例如要检查某个值的第3位是否置位：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; b&nbsp;&nbsp; =&nbsp;&nbsp; 50;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; c&nbsp;&nbsp; =&nbsp;&nbsp; b&nbsp;&nbsp; |&nbsp;&nbsp; 0x04;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "c&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; c&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 可表达为：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00110010&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; b&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 00000100&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; |&nbsp;&nbsp; 0x04&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00110110&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; result&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 异或运算(^)&nbsp;&nbsp; <br />
&nbsp; 双目运算。二个位不相等时，结果为1，否则为0。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 异或运算可用于位值翻转。例如将第3位与第4位的值翻转：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; b&nbsp;&nbsp; =&nbsp;&nbsp; 50;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "b&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; b&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp; b&nbsp;&nbsp; =&nbsp;&nbsp; b&nbsp;&nbsp; ^&nbsp;&nbsp; 0x18;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "b&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; b&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp; b&nbsp;&nbsp; =&nbsp;&nbsp; b&nbsp;&nbsp; ^&nbsp;&nbsp; 0x18;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "b&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; b&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 可表达为：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00110010&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; b&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^&nbsp;&nbsp; 00011000&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; ^0x18&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00101010&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; result&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00101010&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; b&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^&nbsp;&nbsp; 00011000&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; ^0x18&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00110010&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; result&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 非运算(~)&nbsp;&nbsp; <br />
&nbsp; 单目运算。位值取反，置0为1，或置1为0。非运算的用途是将指定位清0，其余位置1。非运算与数值大小无关。例如将第1位和第2位清0，其余位置1：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; b&nbsp;&nbsp; =&nbsp;&nbsp; ~0x03;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "b&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; b&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp; WORD&nbsp;&nbsp; w&nbsp;&nbsp; =&nbsp;&nbsp; ~0x03;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "w&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; w&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 可表达为：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00000011&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; 0x03&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11111100&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; ~0x03&nbsp;&nbsp;&nbsp;&nbsp; b&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0000000000000011&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; 0x03&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1111111111111100&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; ~0x03&nbsp;&nbsp;&nbsp;&nbsp; w&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 非运算和与运算结合，可以确保将指定为清0。如将第4位清0：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; b&nbsp;&nbsp; =&nbsp;&nbsp; 50;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "b&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; b&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; c&nbsp;&nbsp; =&nbsp;&nbsp; b&nbsp;&nbsp; &amp;&nbsp;&nbsp; ~0x10;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "c&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; c&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 可表达为：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00110010&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; b&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&nbsp;&nbsp; 11101111&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; ~0x10&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00100010&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; result&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 移位运算(&gt;&gt;&nbsp;&nbsp; 与&nbsp;&nbsp; &lt;&lt;)&nbsp;&nbsp; <br />
&nbsp; 将位值向一个方向移动指定的位数。右移&nbsp;&nbsp; &gt;&gt;&nbsp;&nbsp; 算子从高位向低位移动，左移&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; 算子从低位向高位移动。往往用位移来对齐位的排列(如MAKEWPARAM,&nbsp;&nbsp; HIWORD,&nbsp;&nbsp; LOWORD&nbsp;&nbsp; 宏的功能)。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; b&nbsp;&nbsp; =&nbsp;&nbsp; 12;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "b&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; b&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp; BYTE&nbsp;&nbsp; c&nbsp;&nbsp; =&nbsp;&nbsp; b&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; 2;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "c&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; c&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp; c&nbsp;&nbsp; =&nbsp;&nbsp; b&nbsp;&nbsp; &gt;&gt;&nbsp;&nbsp; 2;&nbsp;&nbsp; <br />
&nbsp; cout&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; "c&nbsp;&nbsp; =&nbsp;&nbsp; "&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; c&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; endl;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 可表达为：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00001100&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; b&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00110000&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; b&nbsp;&nbsp; &lt;&lt;&nbsp;&nbsp; 2&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00000011&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; b&nbsp;&nbsp; &gt;&gt;&nbsp;&nbsp; 2&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 译注：以上示例都对，但举例用法未必恰当。请阅文末链接的文章，解释得较为清楚。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 位域(Bit&nbsp;&nbsp; Field)&nbsp;&nbsp; <br />
&nbsp;位操作中的一件有意义的事是位域。利用位域可以用BYTE,&nbsp;&nbsp; WORD或DWORD来创建最小化的数据结构。例如要保存日期数据，并尽可能减少内存占用，就可以声明这样的结构：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; struct&nbsp;&nbsp; date_struct&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BYTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; day&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp; 5,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 1&nbsp;&nbsp; to&nbsp;&nbsp; 31&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; month&nbsp;&nbsp; :&nbsp;&nbsp; 4,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 1&nbsp;&nbsp; to&nbsp;&nbsp; 12&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; year&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp; 14;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 0&nbsp;&nbsp; to&nbsp;&nbsp; 9999&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }date;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 在结构中，日期数据占用最低5位，月份占用4位，年占用14位。这样整个日期数据只需占用23位，即3个字节。忽略第24位。如果用整数来表达各个域，整个结构要占用12个字节。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; |&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; |&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; |&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp; |&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------&nbsp;&nbsp; year&nbsp;&nbsp; --------------+&nbsp;&nbsp; month+--&nbsp;&nbsp; day&nbsp;&nbsp; --+&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 现在分别看看在这个结构声明中发生了什么&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 首先看一下位域结构使用的数据类型。这里用的是BYTE。1个BYTE有8个位，编译器将分配1个BYTE的内存。如果结构内的数据超过8位，编译器就再分配1个BYTE，直到满足数据要求。如果用WORD或DWORD作结构的数据类型，编译器就分配一个完整的32位内存给结构。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 其次看一下域声明。变量(day,&nbsp;&nbsp; month,&nbsp;&nbsp; year)名跟随一个冒号，冒号后是变量占用的位数。位域之间用逗号分隔，用分号结束。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; 使用了位域结构，就可以方便地象处理普通结构数据那样处理成员数据。尽管我们无法得到位域的地址，却可以使用结构地址。例如：&nbsp;&nbsp; <br />
&nbsp; date.day&nbsp;&nbsp; =&nbsp;&nbsp; 12;&nbsp;&nbsp; <br />
&nbsp; dateptr&nbsp;&nbsp; =&nbsp;&nbsp; &amp;date;&nbsp;&nbsp; <br />
&nbsp; dateptr-&gt;year&nbsp;&nbsp; =&nbsp;&nbsp; 1852;</font>
</div><div id="MySignature"></div>
<div class="clear"></div>
<div id="blog_post_info_block">
<div id="BlogPostCategory"></div>
<div id="EntryTag"></div>
<div id="blog_post_info">
</div>
<div class="clear"></div>
<div id="post_next_prev"></div>
</div>


		</div>
		<div class = "postDesc">posted @ <span id="post-date">2008-06-17 18:00</span> <a href='http://www.cnblogs.com/flying_bat/'>至尊王者</a> 阅读(<span id="post_view_count">...</span>) 评论(<span id="post_comment_count">...</span>)  <a href ="http://i.cnblogs.com/EditPosts.aspx?postid=1224178" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(1224178);return false;">收藏</a></div>
	</div>
	<script type="text/javascript">var allowComments=true,isLogined=false,cb_blogId=5363,cb_entryId=1224178,cb_blogApp=currentBlogApp,cb_blogUserGuid='a086310b-63cf-dd11-9e4d-001cf0cd104b',cb_entryCreatedDate='2008/6/17 18:00:00';loadViewCount(cb_entryId);</script>
	
</div><!--end: topics 文章、评论容器-->
<a name="!comments"></a><div id="blog-comments-placeholder"></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script>
<div id="comment_form" class="commentform">
<a name="commentform"></a>
<div id="divCommentShow"></div>
<div id="comment_nav"><span id="span_refresh_tips"></span><a href="javascript:void(0);" id="lnk_RefreshComments" onclick="return RefreshCommentList();">刷新评论</a><a href="#" onclick="return RefreshPage();">刷新页面</a><a href="#top">返回顶部</a></div>
<div id="comment_form_container"></div>
<div class="ad_text_commentbox" id="ad_text_under_commentbox"></div>
<div id="site_nav_under"><a href="http://www.cnblogs.com/" target="_blank" title="开发者的网上家园">博客园首页</a><a href="http://q.cnblogs.com/" target="_blank" title="程序员问答社区">博问</a><a href="http://news.cnblogs.com/" target="_blank" title="IT新闻">新闻</a><a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a><a href="http://job.cnblogs.com/" target="_blank">程序员招聘</a><a href="http://kb.cnblogs.com/" target="_blank">知识库</a></div>
<div id="opt_under_post"></div>
<script type="text/javascript">
    var enableGoogleAd = canShowAdsense(); var googletag = googletag || {}; googletag.cmd = googletag.cmd || [];
    fixPostBodyFormat();
</script>
<div id="ad_under_post_holder">
<script type='text/javascript'>
    var googletag = googletag || {};
    googletag.cmd = googletag.cmd || [];
    (function () {
        if (enableGoogleAd) {
            var gads = document.createElement('script');
            gads.async = true;
            gads.type = 'text/javascript';
            var useSSL = 'https:' == document.location.protocol;
            gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js';
            var node = document.getElementsByTagName('script')[0];
            node.parentNode.insertBefore(gads, node);
        }
    })();
</script>
<script type='text/javascript'>
    try {
        if (enableGoogleAd) {
            googletag.cmd.push(function () {
                googletag.defineSlot('/1090369/cnblogs_blogpost_C1_sitehome', [300, 250], 'div-gpt-ad-1346480159711-0').addService(googletag.pubads());
                googletag.defineSlot('/1090369/cnblogs_blogpost_C2', [468, 60], 'div-gpt-ad-1410860226396-0').addService(googletag.pubads());
                googletag.pubads().enableSingleRequest();
                googletag.enableServices();
            });
        };
    } catch (e) { }
</script>
<div id="google_ad_c1" class="c_ad_block">
    <div id='div-gpt-ad-1346480159711-0' style='width:300px; height:250px;'>
    <script type='text/javascript'>
        try {
            if (enableGoogleAd) {
                googletag.cmd.push(function () { googletag.display('div-gpt-ad-1346480159711-0'); });            
            } else {
                $('#div-gpt-ad-1346480159711-0').hide();
            }
    } catch (e) { }
    </script>
    </div>
</div>
</div>
<div id="under_post_news"></div>
<div id="google_ad_c2" class="c_ad_block">
<div id='div-gpt-ad-1410860226396-0' style='width:468px; height:60px;'>
<script type='text/javascript'>
try {
    if (enableGoogleAd) {
        googletag.cmd.push(function () { googletag.display('div-gpt-ad-1410860226396-0'); });
    } else {
        $('#div-gpt-ad-1346480159711-0').hide();
    }
} catch (e) { }
</script>
</div>
</div>
<div id="under_post_kb"></div>
<div id="HistoryToday" class="c_ad_block"></div>
<script type="text/javascript">
$(function () {
    loadNewsAndKb();
    loadBlogSignature();
    LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
    GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate);
    loadOptUnderPost();
    GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);
    setTimeout(function () { incrementViewCount(cb_entryId); }, 200);
});
</script>
</div>

	</div><!--end: forFlow -->
	</div><!--end: mainContent 主体内容容器-->

	<div id="sideBar">
		<div id="sideBarMain">
			
<!--done-->
<div class="newsItem">
<h3 class="catListTitle">公告</h3>
	<div id="blog-news"></div><script type="text/javascript">loadBlogNews();</script>
</div>

			<div id="blog-calendar" style="display:none"></div><script type="text/javascript">loadBlogDefaultCalendar();</script>
			
			<div id="leftcontentcontainer">
				<div id="blog-sidecolumn"></div><script type="text/javascript">loadBlogSideColumn();</script>
			</div>
			
		</div><!--end: sideBarMain -->
	</div><!--end: sideBar 侧边栏容器 -->
	<div class="clear"></div>
	</div><!--end: main -->
	<div class="clear"></div>
	<div id="footer">
		
<!--done-->
Copyright &copy;2015 至尊王者
	</div><!--end: footer -->
</div><!--end: home 自定义的最大容器 -->
</body>
</html>
